from datetime import datetime

from . import db


class User(db.Model):
    """用户"""
    __tablename__ = "user"

    id = db.Column(db.Integer, primary_key=True)  # 用户编号

    nick_name = db.Column(db.String(32), unique=True, nullable=False)  # 用户名
    password = db.Column(db.String(128), nullable=False)  # 密码
    email = db.Column(db.String(128), nullable=False)  # 电子邮箱
    mobile = db.Column(db.String(11), unique=True, nullable=False)  # 手机号
    avatar_url = db.Column(db.String(256))  # 用户头像路径
    create_time = db.Column(db.DateTime, default=datetime.now)  # 注册时间
    last_login = db.Column(db.DateTime, default=datetime.now)  # 最后一次登录时间
    image_code = db.Column(db.Integer, nullable=False)  # 验证码图片地址
    address = db.Column(db.String(512))  # 用户收货地址
    postal_code = db.Column(db.Integer)  # 邮政编码
    gender = db.Column(  # 性别
        db.Enum(
            "MAN",  # 男
            "WOMAN"  # 女
        ),
        default="MAN"
    )


class Projects(db.Model):
    """商品"""
    __tablename__ = "projects"

    id = db.Column(db.Integer, primary_key=True)  # 商品编号
    title = db.Column(db.String(256), nullable=False)  # 商品标题
    digest = db.Column(db.String(512), nullable=False)  # 商品摘要
    price = db.Column(db.Integer, nullable=False)  # 商品价格、售价(到手价)
    market_price = db.Column(db.Integer, nullable=False)  # 市场价
    weight = db.Column(db.Integer, nullable=False)  # 商品重量
    buy_num = db.Column(db.Integer, nullable=False)  # 购买数量
    quantity = db.Column(db.Integer, nullable=False)  # 库存量
    db.Column(db.String(256))  # 商品列表图片路径
    category_id = db.Column(db.Integer, db.ForeignKey("category.id"))
    category = db.relationship('Category', backref='projects')
    product_url = db.Column(db.String(256))  # 商品图片url


class Category(db.Model):
    """商品分类"""

    __tablename__ = "category"

    id = db.Column(db.Integer, primary_key=True)  # 分类编号

    name = db.Column(db.String(64), nullable=False)  # 分类名
    create_time = db.Column(db.DateTime, default=datetime.now)  # 记录的创建时间
    update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)  # 记录的更新时间
